#!/bin/bash

# 默认参数
APP_PATH="apps/user_rpc"     # 应用路径
SERVICE_NAME="user"          # 服务名称
APP_TYPE="rpc"               # 应用类型: rpc 或 api
TAG="latest"                 # 镜像标签
HARBOR_DOMAIN="harbor.com"   # Harbor域名
PROJECT="zero-k8s"           # Harbor项目名
DOCKERFILE_PATH="."          # Dockerfile路径

# 帮助函数
show_help() {
  echo "Usage: $0 [options]"
  echo "Options:"
  echo "  -p, --path       应用路径 (默认: apps/user_rpc)"
  echo "  -s, --service    服务名称 (默认: user)"
  echo "  -t, --type       应用类型 (rpc 或 api, 默认: rpc)"
  echo "  -v, --tag        镜像标签 (默认: latest)"
  echo "  -r, --registry   Harbor域名 (默认: harbor.com)"
  echo "  -j, --project    Harbor项目名 (默认: zero-k8s)"
  echo "  -f, --file       Dockerfile路径 (默认: .)"
  echo "  -h, --help       显示帮助信息"
  exit 0
}

# 解析命令行参数
while [[ $# -gt 0 ]]; do
  case $1 in
    -p|--path)
      APP_PATH="$2"
      shift 2
      ;;
    -s|--service)
      SERVICE_NAME="$2"
      shift 2
      ;;
    -t|--type)
      APP_TYPE="$2"
      shift 2
      ;;
    -v|--tag)
      TAG="$2"
      shift 2
      ;;
    -r|--registry)
      HARBOR_DOMAIN="$2"
      shift 2
      ;;
    -j|--project)
      PROJECT="$2"
      shift 2
      ;;
    -f|--file)
      DOCKERFILE_PATH="$2"
      shift 2
      ;;
    -h|--help)
      show_help
      ;;
    *)
      echo "未知参数: $1"
      show_help
      ;;
  esac
done

# 验证应用类型
if [[ "$APP_TYPE" != "rpc" && "$APP_TYPE" != "api" ]]; then
  echo "错误: 应用类型必须是 'rpc' 或 'api'"
  exit 1
fi

# 完整镜像路径
FULL_IMAGE_NAME="${HARBOR_DOMAIN}/${PROJECT}/${SERVICE_NAME}_${APP_TYPE}:${TAG}"

# 检查目录是否存在
if [ ! -d "$APP_PATH" ]; then
  echo "错误: 目录 $APP_PATH 不存在"
  exit 1
fi

# 执行构建流程
echo "开始构建 ${APP_TYPE} 服务: ${SERVICE_NAME}"
echo "应用路径: $APP_PATH"
echo "镜像名称: $FULL_IMAGE_NAME"
echo "Dockerfile路径: $DOCKERFILE_PATH"

cd "$APP_PATH" || exit

# 构建镜像
echo "正在构建Docker镜像..."
docker build -t "${SERVICE_NAME}_${APP_TYPE}:${TAG}" -f "${DOCKERFILE_PATH}/Dockerfile" .
if [ $? -ne 0 ]; then
  echo "Docker构建失败"
  exit 1
fi

# 标记镜像
echo "正在标记镜像..."
docker tag "${SERVICE_NAME}_${APP_TYPE}:${TAG}" "$FULL_IMAGE_NAME"
if [ $? -ne 0 ]; then
  echo "镜像标记失败"
  exit 1
fi

# 推送镜像
echo "正在推送镜像到Harbor..."
docker push "$FULL_IMAGE_NAME"
if [ $? -ne 0 ]; then
  echo "镜像推送失败"
  exit 1
fi

echo "镜像构建并推送成功: $FULL_IMAGE_NAME"
